home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 September / CHIP_CD_2004-09.iso / test / bochs / files / Bochs-2.1.1.exe / / dlxlinux / hd10meg.img / dev / MAKEDEV
Text File  |  1994-07-17  |  12KB  |  478 lines

  1. #!/bin/sh
  2. # $Id: MAKEDEV,v 2.0 1994/07/17 20:41:37 alfie Exp $
  3. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  4. # Customisation:
  5. #   The devices fall into various classes.  This section contains the mapping
  6. # from a class name into a group name and permission.
  7. #   You will almost certainly need to edit the group name to match your
  8. # system, and you may change the permissions to suit your preference.  These
  9. # lines _must_ be of the format "user group perm".
  10.  
  11.  public="  root sys    666"
  12.    kmem="  root kmem   660"
  13.     tty="  root tty    666"
  14.    cons="  root tty    622"    # 622 for console?
  15. dialout="  root uucp   660"
  16.   mouse="  root sys    666"
  17. printer="  root daemon 660"
  18.  floppy="  root floppy 660"
  19.    disk="  root disk   660"
  20.    scsi="  root sys    600"
  21.   cdrom="  root disk   660"
  22.    tape="  root disk   660"
  23.   audio="  root sys    666"
  24.   ibcs2="  root sys    666"
  25. scanner="  root sys    666"
  26.  
  27. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  28. #
  29. # This is my attempt at a MAKEDEV script.  IMHO it cleans up many areas.
  30. # It can be used to determine the necessary info for a device without
  31. # actually creating it using the '-n' flag.
  32. #
  33. # It makes less individual devices and tends to make classes of devices
  34. # (eg "MAKEDEV hda" will create "hda" and the 8 partitions; "MAKEDEV ptyp"
  35. # will create the ptyp[0-f] master and ttyp[0-f] slave devices).
  36. #
  37. # If you are aware of any glaring omissions or errors, please let me know.
  38. # Also, if you are a developer who wants your devices supported by MAKEDEV,
  39. # let me know.
  40. #
  41. # Thanks to Ian Jackson for the original help and encouragement.
  42. #     Nick Holloway <Nick.Holloway@alfie.demon.co.uk>  
  43. #                    Last changed: 17th July 1994
  44. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  45. # Device 'make' file.  Valid arguments:
  46. #    generic        create a generic subset of devices
  47. #    local        configuration specific devices (runs MAKEDEV.local)
  48. #    std        standard devices
  49. #    update        create and delete devices based on current devices
  50. #            registered in running kernel
  51. #  Virtual Terminals:
  52. #    console        (also known as tty0)
  53. #    tty{0..63}    virtual consoles
  54. #  Serial devices:
  55. #    ttyS{0..63}    serial ports and corresponding dialout device
  56. #  Pseudo Terminals:
  57. #    pty[p-s]    banks of of master and slave pseudo terminals
  58. #  Parallel ports:
  59. #    par[0-3]    parallel ports
  60. #    lp[0-3]           ""     ""
  61. #  Bus Mice:
  62. #    busmice        various bus mice
  63. #  Joystick:
  64. #    js        joystick
  65. #  Disks:
  66. #    fd[0-4]        floppy disks
  67. #    hd[a-d]        AT hard disks (1st controller)
  68. #    hd1[a-d]    2nd AT controller hard disks
  69. #    xd[a-d]     XT hard disks
  70. #    sd[a-i]        SCSI hard disks
  71. #    loop        Loopback disk devices
  72. #  Tapes:
  73. #    st[0-1]        SCSI tapes
  74. #    qic        QIC-80 tapes
  75. #    ftape        floppy driver tapes (QIC-117)
  76. #  CD:
  77. #    scd[0-1]    SCSI CD players
  78. #    sonycd        Sony CDU-31A CD player
  79. #    mcd        Mitsumi CD player
  80. #    cdu535        Sony CDU-535 CD player
  81. #    lmscd        LMS/Philips CD player    (needs new major number)
  82. #    sbpcd        Sound Blaster CD player
  83. #    idecd        NEC CDR-260
  84. #  Scanner:
  85. #    scan        Logitech ScanMan32 & ScanMan 256
  86. #  Audio:
  87. #    audio        various audio devices
  88. #    pcaudio        audio devices used by pcsndrv
  89. #  Misc:
  90. #       sg        generic SCSI devices
  91. #    fd        file names for file descriptors
  92. #    ibcs2        devices (and symlinks) needed by ibcs2 emulation
  93. #    helloworld    module demonstration device
  94. #
  95. #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
  96.  
  97. opt_v=
  98. opt_d=
  99. opt_n=
  100.  
  101. while [ $# -ge 1 ]
  102. do
  103.     case $1 in
  104.         --)    shift; break ;;
  105.         -v)    shift; opt_v=1 ;;
  106.         -d)    shift; opt_d=1 ;;
  107.         -n)    shift; opt_n=1; opt_v=1 ;;
  108.         -*)    echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
  109.         *)    break ;;
  110.     esac
  111. done
  112.  
  113. opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
  114.  
  115. makedev () {    # usage: makedev name [bcu] major minor owner group mode
  116.     if [ "$opt_v" ]
  117.     then    if [ "$opt_d" ]
  118.         then    echo "rm -f $1"
  119.         else    echo "$1    = $2 $3 $4 $5:$6 $7" 
  120.         fi
  121.     fi
  122.     [ ! "$opt_n" ] && rm -f $1 &&
  123.     [ ! "$opt_d" ] && mknod $1 $2 $3 $4 &&
  124.         chown $5:$6 $1 &&
  125.         chmod $7 $1
  126. }
  127. symlink () {    # usage: symlink name target
  128.     if [ "$opt_v" ]
  129.     then    if [ "$opt_d" ]
  130.         then    echo "rm -f $1"
  131.         else    echo "$1    -> $2"
  132.         fi
  133.     fi
  134.     [ ! "$opt_n" ] && rm -f $1 &&
  135.     [ ! "$opt_d" ] && ln -s $2 $1
  136. }
  137.  
  138. devices=
  139. if [ ! -f /proc/devices ]
  140. then
  141.     echo "$0: warning: can't read /proc/devices" >&2
  142. else
  143.     exec 3</proc/devices
  144.     while read major device <&3
  145.     do
  146.         case "$major" in
  147.             Character|Block|'')
  148.                 ;;
  149.             *)
  150.                 eval "major_$device=$major"
  151.                 devices="$devices $device"
  152.                 ;;
  153.         esac
  154.     done
  155.     exec 3<&-
  156. fi
  157.  
  158. Major () {
  159.     device=$2
  160.     if [ "$opt_d" ]
  161.     then
  162.         echo -1
  163.     else
  164.         eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
  165.     fi
  166. }
  167.  
  168. cvt () {
  169.     while [ $# -ne 0 ]
  170.     do
  171.         case "$1" in
  172.             mem|tty)    ;;
  173.             hd)    echo hda hdb ;;
  174.             xd)    echo xda xdb ;;
  175.             fd)    echo fd0 fd1 ;;
  176.             lp)    echo lp0 lp1 lp2 ;;
  177.             mt)    echo ftape ;;
  178.             lo)    echo loop ;;
  179.             ibcs2)    echo ibcs2 ;;
  180.             tpqic02)    echo qic ;;
  181.             sound)        echo audio ;;
  182.             Scanner)    echo scan ;;
  183.             idecd)    echo idecd ;;
  184.             hw)    echo helloworld ;;
  185.             *)    echo "$0: don't know what \"$1\" is" >&2 ;;
  186.         esac
  187.         shift
  188.     done
  189. }
  190.  
  191. for arg
  192. do
  193.     case $arg in
  194.     generic)
  195.         $0 $opts std
  196.         $0 $opts fd0 fd1
  197.         $0 $opts hda hdb
  198.         $0 $opts xda xdb
  199.         $0 $opts sda sdb
  200.         $0 $opts ptyp ptyq ptyr ptys
  201.         $0 $opts console tty1 tty2 tty3 tty4 tty5 tty6 tty7 tty8
  202.         $0 $opts ttyS0 ttyS1 ttyS2 ttyS3
  203.         $0 $opts busmice
  204.         $0 $opts lp0 lp1 lp2
  205.         $0 $opts par0 par1 par2
  206.         $0 $opts fd
  207.         ;;
  208.     local)
  209.         $0.local $opts
  210.         ;;
  211.     std)
  212.         makedev mem  c 1 1 $kmem
  213.         makedev kmem c 1 2 $kmem
  214.         makedev null c 1 3 $public
  215.         makedev port c 1 4 $kmem
  216.         makedev zero c 1 5 $public
  217.         symlink core /proc/kcore
  218.         makedev full c 1 7 $public
  219.         makedev ram  b 1 1 $disk
  220.         makedev tty  c 5 0 $tty
  221.         ;;
  222.     console|tty0)
  223.         makedev $arg c 4 0 $cons
  224.         ;;
  225.     tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
  226.         line=`expr $arg : "tty\(.*\)"`
  227.         makedev tty$line c 4 $line $tty
  228.         ;;
  229.     ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
  230.         line=`expr $arg : "ttyS\(.*\)"`
  231.         minor=`expr 64 + $line`
  232.         makedev ttyS$line c 4 $minor $tty
  233.         makedev cua$line c 5 $minor $dialout
  234.         ;;
  235.     pty[p-s])
  236.         # Currently limited to 64 master/slave pairs.
  237.         bank=`expr $arg : "pty\(.\)"`
  238.         base=`expr \( pqrs : ".*$bank" - 1 \) \* 16`
  239.         for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
  240.         do
  241.             j=`expr 0123456789abcdef : ".*$i" - 1`
  242.             makedev pty$bank$i c 4 `expr 128 + $base + $j` $tty
  243.             makedev tty$bank$i c 4 `expr 192 + $base + $j` $tty
  244.         done
  245.         ;;
  246.     par[0-2])
  247.         major=`Major lp 6` || continue
  248.         port=`expr $arg : "par\(.\)"`
  249.         makedev $arg c $major $port $printer
  250.         ;;
  251.     lp[0-2])
  252.         major=`Major lp 6` || continue
  253.         port=`expr $arg : "lp\(.\)"`
  254.         makedev $arg c $major $port $printer
  255.         ;;
  256.     busmice)
  257.         major=`Major mouse 10` || continue
  258.         makedev logibm   c $major 0 $mouse
  259.         makedev psaux    c $major 1 $mouse
  260.         makedev inportbm c $major 2 $mouse
  261.         makedev atibm    c $major 3 $mouse
  262.         ;;
  263.     js)
  264.         makedev js0 c 15 0 $mouse
  265.         makedev js1 c 15 1 $mouse
  266.         ;;
  267.     fd[0-4])
  268.         unit=`expr $arg : "fd\(.\)"`
  269.         makedev fd${unit} b 2 $unit $floppy
  270.         makedev fd${unit}d360  b 2 `expr $unit +  4` $floppy
  271.         makedev fd${unit}h1200 b 2 `expr $unit +  8` $floppy
  272.         makedev fd${unit}D360  b 2 `expr $unit + 12` $floppy
  273.         makedev fd${unit}H360  b 2 `expr $unit + 12` $floppy
  274.         makedev fd${unit}D720  b 2 `expr $unit + 16` $floppy
  275.         makedev fd${unit}H720  b 2 `expr $unit + 16` $floppy
  276.         makedev fd${unit}h360  b 2 `expr $unit + 20` $floppy
  277.         makedev fd${unit}h720  b 2 `expr $unit + 24` $floppy
  278.         makedev fd${unit}H1440 b 2 `expr $unit + 28` $floppy
  279.         makedev fd${unit}H2880 b 2 `expr $unit + 32` $floppy
  280.         ;;
  281.     hd[a-d])
  282.         unit=`expr $arg : "hd\(.\)"`
  283.         base=`expr \( abcd : ".*$unit" - 1 \) \* 64`
  284.         makedev hd$unit b 3 $base $disk
  285.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 # 13 14 15 16
  286.         do
  287.             makedev hd$unit$part b 3 `expr $base + $part` $disk
  288.         done
  289.         ;;
  290.     hd1[a-d])
  291.         unit=`expr $arg : "hd1\(.\)"`
  292.         base=`expr \( abcd : ".*$unit" - 1 \) \* 64`
  293.         makedev hd1$unit b 22 $base $disk
  294.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 # 13 14 15 16
  295.         do
  296.             makedev hd1$unit$part b 22 `expr $base + $part` $disk
  297.         done
  298.         ;;
  299.     xd[a-d])
  300.         major=`Major xd 13` || continue
  301.         unit=`expr $arg : "xd\(.\)"`
  302.         base=`expr \( abcd : ".*$unit" - 1 \) \* 64`
  303.         makedev xd$unit b $major $base $disk
  304.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 # 13 14 15 16
  305.         do
  306.             makedev xd$unit$part b $major `expr $base + $part` $disk
  307.         done
  308.         ;;
  309.     sd[a-h])
  310.         major=`Major sd 8` || continue
  311.         unit=`expr $arg : "sd\(.\)"`
  312.         base=`expr \( abcdefgh : ".*$unit" - 1 \) \* 16`
  313.         makedev sd$unit b $major $base $disk
  314.         for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
  315.         do
  316.             minor=`expr $base + $part`
  317.             makedev sd$unit$part b $major $minor $disk
  318.         done
  319.         ;;
  320.     loop)
  321.         major=`Major lo` || continue
  322.         for part in 0 1 2 3 4 5 6 7
  323.         do
  324.             makedev loop$part b $major $part $disk
  325.         done
  326.         ;;
  327.     st[0-1])
  328.         major=`Major st 9`
  329.         unit=`expr $arg : "st\(.\)"`
  330.         makedev st$unit c $major $unit $tape
  331.         makedev nst$unit c $major `expr 128 + $unit` $tape
  332.         ;;
  333.     qic)
  334.         major=`Major tpqic02 12`
  335.         makedev rmt8       c $major   6 $tape
  336.         makedev rmt16      c $major   8 $tape
  337.         makedev tape-d     c $major 136 $tape
  338.         makedev tape-reset c $major 255 $tape
  339.         ;;
  340.     ftape)
  341.         major=`Major mt 27` || continue
  342.         for unit in 0 1 2 3
  343.         do
  344.             makedev rft$unit c $major $unit $tape
  345.             makedev nrft$unit c $major `expr $unit + 4` $tape
  346.         done
  347.         symlink ftape rft0
  348.         symlink nftape nrft0
  349.         ;;
  350.     scd[0-1])
  351.         major=`Major sr 11` || continue
  352.         unit=`expr $arg : "scd\(.\)"`
  353.         makedev scd$unit b $major $unit $cdrom
  354.         ;;
  355.     sonycd)
  356.         major=`Major cdu31a 15` || continue
  357.         makedev $arg b $major 0 $cdrom
  358.         ;;
  359.     mcd)
  360.         major=`Major mcd 23` || continue
  361.         makedev $arg b $major 0 $cdrom
  362.         ;;
  363.     cdu535)
  364.         makedev $arg b 24 0 $cdrom
  365.         ;;
  366.     lmscd)
  367.         makedev $arg b 24 0 $cdrom
  368.         ;;
  369.     sbpcd)
  370.         major=`Major sbpcd 25` || continue
  371.         makedev $arg    b $major 0 $cdrom
  372.         makedev ${arg}0 b $major 0 $cdrom
  373.         makedev ${arg}1 b $major 1 $cdrom
  374.         makedev ${arg}2 b $major 2 $cdrom
  375.         makedev ${arg}3 b $major 3 $cdrom
  376.         ;;
  377.     scan)
  378.         major=`Major Scanner` || continue;
  379.         makedev $arg    c $major 0 $scanner
  380. #        makedev ${arg}d c $major 1 $scanner
  381.         ;;
  382.     audio)
  383.         major=`Major sound 14`
  384.         makedev mixer     c $major 0 $audio
  385.         makedev sequencer c $major 1 $audio
  386.         makedev midi      c $major 2 $audio
  387.         makedev dsp       c $major 3 $audio
  388.         makedev audio     c $major 4 $audio
  389.         makedev sndstat   c $major 6 $audio
  390.         makedev mixer1    c $major 16 $audio
  391.         makedev dsp1      c $major 19 $audio
  392.         makedev audio1    c $major 20 $audio
  393.         ;;
  394.     pcaudio)
  395.         makedev pcmixer c 30 0 $audio
  396.         makedev pcsp    c 30 3 $audio
  397.         makedev pcaudio c 30 4 $audio
  398.         ;;
  399.     sg)
  400.         major=`Major sg 21`
  401.         for unit in a b c d e f g h
  402.         do
  403.             minor=`expr abcdefgh : ".*$unit" - 1`
  404.             makedev $arg$unit c $major $minor $scsi
  405.         done
  406.         ;;
  407.     fd)
  408.         # not really devices, we use the /proc filesystem
  409.         symlink fd     /proc/self/fd
  410.         symlink stdin  fd/0
  411.         symlink stdout fd/1
  412.         symlink stderr fd/2
  413.         ;;
  414.     ibcs2)
  415.         major=`Major ibcs2 30` || continue
  416.         makedev socksys c $major 0 $ibcs2
  417.         makedev spx     c $major 1 $ibcs2
  418.         symlink XOR null
  419.         ;;
  420.     helloworld)
  421.         major=`Major hw` || continue
  422.         makedev helloworld c $major 0 $public
  423.         ;;
  424.     update)
  425.         if [ ! "$devices" ]
  426.         then
  427.             echo "$0: don't appear to have any devices" >&2
  428.             continue
  429.         fi
  430.         if [ "$opt_d" ]
  431.         then
  432.             echo "$0: can't delete an update" >&2
  433.             continue
  434.         fi
  435.         create=
  436.         delete=
  437.         devs="$devices"
  438.         if [ -f DEVICES ]
  439.         then
  440.             exec 3<DEVICES
  441.             while read device major <&3
  442.             do
  443.                 eval now=\$major_$device
  444.                 if [ "$now" = "" ]
  445.                 then
  446.                     delete="$delete `cvt $device`"
  447.                     continue
  448.                 elif [ "$now" != $major ]
  449.                 then
  450.                     create="$create "`cvt $device`
  451.                 fi
  452.                 devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
  453.             done
  454.             exec 3<&-
  455.         fi
  456.         create="$create "`cvt $devs`
  457.         $0 $opts -d $delete
  458.         $0 $opts $create
  459.         [ "$opt_n" ] && continue
  460.         for device in $devices
  461.         do
  462.             if [ "`cvt $device`" ]
  463.             then
  464.                 eval echo $device \$major_$device
  465.             fi
  466.         done > DEVICES
  467.         ;;
  468.     *)
  469.         echo "$0: don't know how to make device \"$arg\"" >&2
  470.         ;;
  471.     esac
  472. done
  473.  
  474. exit
  475.